home *** CD-ROM | disk | FTP | other *** search
- #! /bin/sh
- # ^^^ THIS SHELL NEEDS BUILT-IN test COMMAND FOR SPEED
- # $Header: /home/jerry/.bin/RCS/nexts,v 1.3 92/08/09 23:26:33 jerry mh_contrib $
- ### nexts - show next message in an MH sequence
- ### Usage: nexts [sequence-name] [+folder]
- ##
- ## IF YOU TYPE AN MH SEQUENCE NAME ON ITS COMMAND LINE, AND THE CURRENT
- ## MESSAGE IS BEFORE THE FIRST MESSAGE IN THAT SEQUENCE, nexts SHOWS
- ## THE FIRST MESSAGE IN THAT SEQUENCE. OTHERWISE, IT SHOWS THE
- ## NEXT MESSAGE IN THAT SEQUENCE. IT USES THE MH show PROGRAM.
- ##
- ## THE SEQUENCE NAME YOU'RE VIEWING IS STORED IN A FILE NAMED
- ## .nexts.seqname IN THE MH FOLDER DIRECTORY ITSELF. THIS MEANS
- ## THAT YOU CAN HAVE LOTS OF little FILES HANGING AROUND;
- ## ALSO, IF SOMEONE ELSE IS LOGGED ON TO YOUR ACCOUNT AND THEY
- ## CHANGE THE SEQUENCE NAME, THEIR CHANGE WILL AFFECT YOU.
- ## STILL, THIS IS A GOOD COMPROMISE FOR PEOPLE USING WINDOWS, ETC.
- ##
- ## MH 6.7.2 CAN DO THE SAME THING WITHOUT THIS PROGRAM. EXAMPLE:
- ## show unseen:next
- #
- # NOTE TO HACKERS: TABSTOPS ARE SET AT 4 IN THIS CODE
- #
- # USE AT YOUR OWN RISK. SEEMS TO WORK, BUT IT'S YOUR RESPONSIBILITY!
- # PLEASE TELL ME ABOUT BUGS AND FIXES: Jerry Peek, jerry@ora.com
-
- mh=/usr/local/mh # WHERE MH COMMANDS LIVE
-
- for arg
- do
- case "$arg" in
- [+@]*)
- case "$fol" in
- "") fol="$arg" ;;
- *) echo "`basename $0`: only one folder at a time!" 1>&2; exit 1;;
- esac
- ;;
- *) # NOT A FOLDER, SO IT MUST BE A SEQUENCE NAME:
- case "$seq" in
- "") seq="$arg" ;;
- *) echo "`basename $0`: '$arg'? Only one sequence!" 1>&2; exit 1;;
- esac
- ;;
- esac
- done
-
- # IF NO SEQUENCE GIVEN, READ DEFAULT:
- seqfile="`$mh/mhpath $fol`/.nexts.seqname" || exit 1
- if [ -z "$seq" -a -r "$seqfile" ]; then
- # USE SEQUENCE NAME STORED IN FILE
- seq="`/bin/cat $seqfile`" || exit 1
- elif [ -n "$seq" ]; then
- # STORE SEQUENCE NAME IN FILE (MAYBE CREATING IT TOO):
- echo "$seq" >$seqfile || exit 1
- else
- echo "`basename $0` quitting: I'm confused." 1>&2
- exit 1
- fi
-
- # PUT CURRENT MESSAGE NUMBER IN $3; IF NONE, GETS THE STRING "(null)"
- set x `$mh/mark -list -seq cur $fol` || exit 1
- curmsg="$3"
-
- # GET MESSAGE NUMBERS TO DEAL WITH INTO $1, $2, ETC.; IF NONE, EXIT:
- set x `$mh/scan -format '%(msg)' $seq` || exit 1
-
- test -z "$2" && exit 1 # IF NO MESSAGES IN LIST (IF $2 IS EMPTY), EXIT
-
- case "$curmsg" in
-
- "(null)") $mh/show $2; exit ;; # NO CURRENT MESSAGE; SHOW FIRST ONE
-
- [1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9])
- # THERE'S A CURRENT MESSAGE; FIND NEXT ONE IN SEQUENCE:
- shift
- for msg
- do
- if [ $msg -gt $curmsg ]
- then
- show $msg
- exit 0 # BREAK LOOP AND QUIT...
- fi
- done
- # IF GET HERE, LOOP DIDN'T FIND A NEXT MESSAGE. QUIT:
- echo "`basename $0`: no next message in '$seq' sequence in ${fol-current folder}" 1>&2
- exit 0
- ;;
-
- *) echo "`basename $0': current message is '$curmsg'!?!" 1>&2
- exit 1
- ;;
- esac
-